import numpy as np
import random
win1 = 0;lose1 = 0;n1 = 0;time = 100;
win2 = 0;lose2 = 0;n2 = 0;
tm = 10000000
results1=np.zeros((1,tm));results2=np.zeros((1,tm))
#一共进行试验的次数，为了结果更加准确我们进行若干次试验结果取平均。
for trial in range(1,1 + tm):
    for i in range(1,time):
        ab = random.randint(1,3)#随机生成一个1-3内的整数作为玩家的猜测值
        rng = random.sample(range(1,4),3)#将1,2,3三个数随机排列
        key = rng[0]#取第一个位置的数作为答案，即“车藏在第一个位置的数代表的门后面”
        #下面的代码，是用来确定主持人选择哪一扇门打开的，要打开的门编号储存在变量opd里
        if ab != key:
            if ab != rng[1]:
                opd = rng[1];
            else:
                opd  =rng[2];
        else:
            d_r = random.randint(1,2);
            opd = rng[d_r];
        #下面的代码分别就玩家不修改选择、修改选择后分别进行模拟
        #首先是坚持原选择：
        if opd == rng[1]:
            if ab == key:
                win1 = win1 +1;#win1是第一种情况，胜利场次的计数变量，
            else:
                lose1 = lose1 + 1;#lose1是第一种情况，失败场次的计数变量，
        else:
            if ab == key:
                win1 = win1 + 1;
            else:
                lose1 = lose1 + 1;
        #下面是修改选择的结果：
        if opd == rng[1]:
            if ab == key:
                lose2 = lose2 +1;
            else:
                win2 = win2 + 1;
        else:
            if ab == key:
                lose2 = lose2 + 1;
            else:
                win2 = win2 + 1;
    results1[0,trial-1] = win1/time*100;
    results2[0,trial-1] = win2/time*100;
    win1=0;win2=0;lose1=0;lose2=0;
    n1=0;n2=0;#每一次试验后对数据进行清零重置，不然计数变量在不同组平行实验中会累积
    # print(results1);可以中间观察是否正确
    # print(results2);
    print('模拟进度：',(trial/tm*100),'%','请稍等~~~~~');
print('模拟任务完成！');
print('模拟玩家坚持原来选择后胜率为：',np.mean(results1),'%');
print('模拟玩家修改选择后胜率为：',np.mean(results2),'%');






